aBasic C^v^gp}jA

C^v^WindowsLinuxłقړ悤ɍ쐬Ă܂B
JC++łB


Linux    J     gcc 3.4.4
Windows  J     VisualC++6

Windowsł̃RpC@
basic.dsw@VisualC++6ȏŊJĂ

Linuxł̃RpC@
c++LłȂƃRpCł܂
make R}hsĂ




N@

basic filename

ɃC^v^ŎsvȌꂽeLXgt@CnƂɂsł܂



s̍s
vO͈s̕ftHg1024ȓłKv܂B
܂AϐɊi[\ȍő啶ftHg1024ȓłKv܂B
ύXɂ́A
common.h@́@#define MAX_STR_LEN 1024@ύXKv܂B


vOŎgp\ȕϐ

ϐ^64rbg_^ƕ^܂B
ϐсAϐ^̐錾͕Kv܂B
Ă̕ϐ̓O[oXR[v܂B

ź@data[1]@̂悤Ɏw肵܂B
ź@data[1][2]@̂悤Ɏw肵܂̐͂܂B

ȉ̂悤ɔz̓YƂĕw肷邱Ƃł܂
data["aaa"]=1


Ɛl̉Z

̑Zsꂽꍇ͕񂪘AA
lm̉Zsꂽꍇɂ́Al̉Zʂ߂܂B
lƕ̑ZsꂽꍇɂẮAlƂĈAĘA܂B

vO
print 1+1
print 1+"test"
print "test"+1
print "test"+"test"

s
$ ./basic test.txt
2
1test
test1
testtest


vOŎgp\Ȗ

Rg

'Rg

'Ŏn܂镶̓RgƂĈ܂




if  then ߂P else ߂Q

̌ʂ0̏ꍇ͖߂QsAȊOɂ͖߂Ps܂
j߂PA߂Q@̉ӏ if  eval ߂͋Lqł܂B

Eɂ͈ȉ̂̂gpł܂

=	CR[
<	ȂȂ
>	Ȃ菬Ȃ
<=	ȂȂCR[
>=	Ȃ菬ȂCR[
&&	Ah
||	IA
<>	mbgCR[


ẼTv
if 1=1 then print "true" else print "false"
if "test"="test" then print "true" else print "false"
if 1<1 then print "true" else print "false"
if 1>1 then print "true" else print "false"
if 1<=1 then print "true" else print "false"
if 1>=1 then print "true" else print "false"
if 1=1 && 2=1 then print "true" else print "false"
if 1=1 || 2=1 then print "true" else print "false"
if "test"<>"aaaa" then print "true" else print "false"


[v

for x=1 to 10
print x
next x

x1`10܂Ń[v܂
for̃lXg\ł


Wv

goto label

label

gotoɂ胉xɃWv܂
x͖߂ƂėpĂȂłΐ͂܂
ꖼxLꍇɂ́Agoto߂牺ɋ߂xD悳܂B

Tu[`i֐j

gosub label

label
return

gosub߂ɂw肳ꂽxɃWvAreturn߂ɂAWvɕA܂
KAxreturn͈΂łKv܂B
Tu[`̃lXg\ł


Tu[`̃[Jϐ

    x ϐ1
        
        ̒ł ϐ1 [JϐɂȂ܂
        ֐ł̃XR[vĂAꖼ̕ϐƂĂO[oϐ̉e͎󂯂܂񂵁Ae܂B
        
    return

͌ĂяoɒlnAnȂɊ֌WȂRɎwł܂B
̓J}ŋ؂邱Ƃɂ32܂Ŏwł܂B
ϐȂƑOȂ疳łB

label a,b,c,d,e,f,g

Lła,b,c,d,e,f,g̃[Jϐw肵Ă܂B


[JϐɒlnČĂяo

gosub label a

labelɑ΂ĕϐ a ̒lnČĂяoĂ܂B
̒lnꍇɂ̓J}ŋ؂Ďw肵܂

gosub label a,b,1+1,d+1

Lł a,b,1+1,d+1 ̒ln܂B


vO

a="hello"
gosub test 0
print a
end

test a
	print a
	if a<5 then gosub test a+1
	print a
return

s

$ ./basic ./sample/test.txt
0
1
2
3
4
5
5
4
3
2
1
0
hello


͖

input ϐ

͂vĂ܂A͌ʂϐɊi[܂


o͖

print ""
print ϐ

lʏɏo͂܂


GXP[vV[PX
GXP[vV[PXΉ̒[̂ݑΉ܂

clr
location 1,1

clr߂ɂʂNA܂
location߂ɂJ[\ʂ̎wWɈړ܂


ҋ@

wait

̖߂ƁA1bԃvO~܂


abs

abs ϐ

ϐɊi[ĂĺA_ȉ؂̂ĂāA
absƂϐɌʂi[܂B


shell

shell "notepad test.txt"

w肵vOs܂
svOI܂őҋ@܂


I

end

̖߂ǂݍ܂ꂽ_ŃvOI܂


vOŎgp\Ȋϐ

͏o܂AQƂ݂̂łB
ʏ̕ϐ̂悤ɓǂݏo܂B


擾ł闐ĺ@0`9999@͈̔͂ł

rand



time.year	N
time.mon	
time.day	
time.week	j0Aj1Ƃj킷l
time.hour	
time.min	
time.sec	b

R}hC̈

args[1`N] ɑ܂

\G[
vOsɍ\G[ꍇA
ԍŌɋNG[̍sio[ۑ܂B
G[̔s͎񂩂sXLbv邱Ƃ܂B

system.err.line		ԍŌɔG[sio[
system.err.msg		ԍŌɔG[bZ[W


G[̎s~

system.err.exit@ 0 ȊO̐ĂꍇȀŃvO~܂
l 0 ł


GXP[v

\Ŏn܂鎟͑̕ăGXP[v܂

\"@" 
\\@\ 

A͕̕ϊ܂B

\n@s
\a@x


񑀍얽
̒𒲂ׂ

len 

ϐ len ɕ̒i[܂
L̏ꍇ 7 łB

a="abcdefg"
len a
print len


̐؂o mid

mid ,؏oJnʒu,؏o

ϐ mid ɐ؂oꂽ񂪊i[܂
؏oJnʒúA̐擪̈ʒułB
L̏ꍇł̌ʂ bcde łB

a="abcdefg"
mid a,1,4
print mid


񂩂lւ̕ϊ val

val ϐ

ϐ̕񂪒lɂȂ܂B
ϊłȂꍇɂ 0 ɂȂ܂B

l當ւ̕ϊ str

str ϐ

CSV`̐؏o

csv ϐ

؏oʂ́Aϐ[1]`@ɑ܂B
؏oʂ̖́@ϐ[N]ɂ "," ܂B

vO

aaa="\"aaa\",001,\"002\",ddd"
print aaa

csv aaa	'csv̐؏o

loop1
	i=i+1
	print aaa[i]
if ","<>aaa[i] then goto loop1 '؏o̖܂Ń[v

s

$ ./basic test.txt
"aaa",001,"002",ddd
aaa
001
002
ddd
,


CSV`̍쐬

vsc ϐ,,

ϐ[1]`[N]̒lŕŁAJ}؂̕쐬܂B

 0 w肷Ɩ","܂ŏ܂B
w肳ĂĂ","ꍇɂ͎c̒l󔒂Ƃč쐬܂B
ϐ[X]ɐlĂꍇɂ́Aŕ݂܂B


vO

ar[1]="aaa"
ar[2]="bbb"
ar[3]=1
ar[4]=2
ar[5]=","
ar[6]="ccc"
ar[6]="ddd"

vsc ar,"'",10

print ar


s

$ ./basic test.txt
'aaa','bbb',1,2,'','','','','',''


Œ蒷̐؏o

chop ϐ,؏oz

؏oʂ́Aϐ[1]`@ɑ܂B
؏oʂ̖́@ϐ[N]ɂ "," ܂B

؏ozɂ́A
ϐ[1]`@ɐ؂oĂB


vO

ar="5,4,3" '5@4@3@cS ɐ؂o܂
csv ar 'csv߂𗘗pz쐬܂B
data="abcdefghijklmnopqrstuvwxyz"

chop data,ar

loop
	i=i+1
	str=data[i]
	print str
if str<>"," then goto loop '؏o̖܂Ń[v


s

$ ./basic test.txt
abcde
fghi
jkl
mnopqrstuvwxyz
,


trim

̑ÕXy[X菜܂B
ʂ͓nϐɊi[܂B

trim ϐ


̒u

replace ϐ,,u㕶

vO

str="abcdefghijklmn"
replace str,"def","XXXXX"
print str

s

$ ./basic test.txt
abcXXXXXghijklmn


ChJ[hǧ

match p^[,

p^[Ƃėp\ȃChJ[h
* 0ȏ̃ChJ[h
? 1̃ChJ[h

ʂ͕ϐ match Ɋi[܂B


vO

str="abcdefg"

match "b*f",str
print match

match "b???f",str
print match


s

$ ./basic test.txt
bcdef
bcdef


t@Cǂݍ

fread z,t@C

t@C̓esƂɔzɓǂݍ܂܂
ǂݍ񂾌͕ϐ fread Ɋi[܂B
G[ɂ́Aϐ fread -1i[܂B


t@C ./a.txt ǂݍݓe\vO

fread ar,"./a.txt"
if fread=-1 then end'ǂݍ݃G[̏ꍇɂ

for i=1 to fread
	print ar[i]
next i


t@C

fwrite z,t@C,z̒

z̐擪璷At@Cɏ܂܂
G[ɂ́Aϐ fwrite -1i[܂B

vO

ar[1]="hello"
ar[2]="test"
ar[4]=0
ar[5]=100
fwrite ar,"a.txt",5

s
t@C a.txt ̓e

hello
test

0
100


t@C̒ǋL
ǂݍ݌Azvf₵ďނƂɂt@CɒǋLł܂B
̗ł͕ test ǋL܂B

fread ar,"a.txt"
ar[fread+1]="test"
fwrite ar,"a.txt",fread+1


eval
̖߂s܂
1sŊ閽߂̂ݎs\ł
gotogosub͎s\łA߂sɓnfor - nextȂǂ͎sł܂B

eval "print \"test\""



a="print \"test\""
eval a

Lł print "test" ̈sƓłB




